/*****************************************************************************
* Keppe Messenger (KMP) Keppe Project-Team User Messaging System
* Copyright (C) 2013-2014 Keppe Project-Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/

#include "KListWidget.h"
#include <QMouseEvent>
#include <QScrollBar>

KListWidget::KListWidget(QWidget *parent) :
    QListWidget(parent)
{
    oldPosition = 0;
    inRound = false;
    this->setMouseTracking(true);
}

void KListWidget::mouseMoveEvent(QMouseEvent *ev)
{
    int newPosition = ev->y();
    int movePosition;
    if (oldPosition != 0)
    {
        movePosition = oldPosition - newPosition;
    }
    else
    {
        movePosition = 0;
    }
    if (movePosition != 0 && inRound)
    {
        int newValue = this->verticalScrollBar()->value() + movePosition;
        if (newValue > this->verticalScrollBar()->maximum())
        {
            this->verticalScrollBar()->setValue(this->verticalScrollBar()->maximum());
        }
        else if (newValue < this->verticalScrollBar()->minimum())
        {
            this->verticalScrollBar()->setValue(this->verticalScrollBar()->minimum());
        }
        else
        {
            this->verticalScrollBar()->setValue(newValue);
        }
    }
    else
    {
        inRound = true;
    }
    oldPosition = newPosition;
    QListWidget::mouseMoveEvent(ev);
}

void KListWidget::mousePressEvent(QMouseEvent *ev)
{
    oldPosition = 0;
    inRound = true;
    QListWidget::mousePressEvent(ev);
}

void KListWidget::mouseReleaseEvent(QMouseEvent *ev)
{
    oldPosition = 0;
    inRound = false;
    QListWidget::mouseReleaseEvent(ev);
}
